﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Deo.Negocios;
using System.Net.Mail;
using System.Configuration;
using System.Net;

namespace MakeIT.Deo.Apresentacao
{
    public partial class MeuCarrinho : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Util.logAcesso("Meu Carrinho", null, null, null, null);

            cliente clienteVO = (cliente)this.Session["customerActive"];
            if (clienteVO == null)
            {
                this.Response.Redirect("~/MeuCadastro.aspx");
                return;
            }

            OrcamentoBO orcamentoBO = new OrcamentoBO();
            List<orcamento> listOrcamento = orcamentoBO.RecuperaOrcamento(null, clienteVO.IdCliente, "C");
            if (listOrcamento == null || listOrcamento.Count == 0)
            {
                this.PanelOrcamentoVazio.Visible = true;
                this.PanelOrcamento.Visible = false;
            }
            else
            {
                this.PanelOrcamentoVazio.Visible = false;
                this.PanelOrcamento.Visible = true;

                orcamento orcamentoVO = listOrcamento[0];

                if (!IsPostBack)
                {
                    this.TextBoxID.Text = orcamentoVO.IdOrcamento.ToString();
                    this.TextBoxData.Text = orcamentoVO.DataSolic.Value.ToShortDateString();

                    List<orcamentoitem> listOrcamentoItem = new OrcamentoItemBO().RecuperaOrcamentoItem(null, orcamentoVO.IdOrcamento, null);
                    this.GridViewItens.DataSource = listOrcamentoItem;
                    this.GridViewItens.DataBind();
                    this.GridViewItens.Enabled = true;
                }
            }

        }

        protected void GridViewItens_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int idProduto = Int32.Parse(e.Row.Cells[1].Text);
                produto produtoVO = new ProdutoBO().RecuperaProduto(idProduto);
                //subfamilia subFamiliaVO = new SubFamiliaBO().RecuperaSubFamilia(produtoVO.IdSubFamilia);

                //e.Row.Cells[2].Text = subFamiliaVO.SubFamilia;
                e.Row.Cells[2].Text = String.Join(", ",
                    (from subfam in new SubFamiliaBO().RecuperaSubFamilia()
                     join pxsf in new ProdutoBO().RecuperaProdutoXSubFamilia(idProduto, null) on subfam.IdSubFamilia equals pxsf.IdSubFamilia
                     select subfam.SubFamilia).ToArray());
                e.Row.Cells[3].Text = produtoVO.Produto;
                ((TextBox)e.Row.Cells[4].Controls[1]).ToolTip = "Quantidade em " + produtoVO.Unidade + ", e não se esqueça de clicar no botão salvar antes de continuar navegando";
                e.Row.Cells[5].Text = produtoVO.Unidade;
                e.Row.Cells[6].Text = produtoVO.Referencia;
                e.Row.Cells[7].Text = produtoVO.Embalagem;
                e.Row.Cells[8].Text = produtoVO.Caixa;
            }
        }

        protected void ButtonSalvar_Click(object sender, EventArgs e)
        {
            salvarOrcamento(false);
        }

        protected void imbFinalizar_Click(object sender, ImageClickEventArgs e)
        {
            salvarOrcamento(true);

        }
        protected void salvarOrcamento(bool finaliza)
        {
            //Declara objetos
            orcamento orcamentoVO = null;
            OrcamentoBO orcamentoBO = null;
            OrcamentoItemBO orcamentoItemBO = null;
            //bool novoRegistro = false;

            try
            {

                //Cria objeto
                orcamentoBO = new OrcamentoBO();
                orcamentoItemBO = new OrcamentoItemBO();

                //Recupera dados
                orcamentoVO = orcamentoBO.RecuperaOrcamento(Int32.Parse(this.TextBoxID.Text));
                if (finaliza)
                {
                    orcamentoVO.Status = "E";
                    orcamentoBO.SalvaOrcamento(orcamentoVO, false);
                }

                foreach (GridViewRow gvr in this.GridViewItens.Rows)
                {
                    int idOrcamentoItem = Int32.Parse(((ImageButton)gvr.Cells[9].Controls[1]).CommandArgument);
                    orcamentoitem orcamentoItemVO = orcamentoItemBO.RecuperaOrcamentoItem(idOrcamentoItem);

                    orcamentoItemVO.Quantidade = Int32.Parse(((TextBox)gvr.Cells[4].Controls[1]).Text.Replace(".", ""));
                    orcamentoItemBO.SalvaOrcamentoItem(orcamentoItemVO, false);
                }

                // Exibe msg de sucesso ao salvar registro
                if (finaliza)
                {
                    this.PanelOrcamento.Visible = false;
                    this.PanelOK.Visible = true;
                    sendEmail();
                }
                else
                {
                    Util.ExibeAlert(this, "Orçamento salvo com sucesso!");
                }

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        protected void imgbRemove_Click(object sender, ImageClickEventArgs e)
        {
            int idOrcamentoItem = int.Parse(((ImageButton)sender).CommandArgument);

            OrcamentoItemBO orcamentoItemBO = new OrcamentoItemBO();
            orcamentoitem orcamentoItemVO = orcamentoItemBO.RecuperaOrcamentoItem(idOrcamentoItem);

            orcamentoItemBO.DeletaOrcamentoItem(orcamentoItemVO);

            // apaga orcamento se não sobrou mais nenhum item no carrinho
            List<orcamentoitem> listOrcamentoItem = new OrcamentoItemBO().RecuperaOrcamentoItem(null, orcamentoItemVO.IdOrcamento, null);
            if (listOrcamentoItem == null || listOrcamentoItem.Count == 0)
            {
                OrcamentoBO orcamentoBO = new OrcamentoBO();
                orcamento orcamentoVO = orcamentoBO.RecuperaOrcamento(orcamentoItemVO.IdOrcamento);
                orcamentoBO.DeletaOrcamento(orcamentoVO);
            }

            this.Response.Redirect("~/MeuCarrinho.aspx");
        }

        protected void sendEmail()
        {
            MailMessage oEmail = new MailMessage();
            MailAddress sDe = new MailAddress(ConfigurationManager.AppSettings["Email.Administrador"]);

            oEmail.To.Add(ConfigurationManager.AppSettings["Email.SAC"]);
            oEmail.From = sDe;
            oEmail.Priority = MailPriority.Normal;
            oEmail.IsBodyHtml = true;
            oEmail.Subject = "Solicitacao de Orcamento - Site www.deoplasticos.com.br";
            cliente clienteVO = (cliente)this.Session["customerActive"];

            string emailBody =
                          "<table><tr><td>O Cliente:</td><td>" + clienteVO.IdCliente + "-" + clienteVO.Nome + " solicitou um orcamento</td></tr>" +
                          "<tr><td>&nbsp;</td><td>&nbsp;</td></tr>" +
                          "<tr><td>email:</td><td>" + clienteVO.Email + "</td></tr>" +
                          "<tr><td>Fone:</td><td>" + clienteVO.FoneCel + " " + clienteVO.FoneComl + " " + clienteVO.FoneRes + "</td></tr>" +
                          "<tr><td>Estado:</td><td>" + clienteVO.Estado + "</td></tr>" +
                          "<tr><td>Cidade:</td><td>" + clienteVO.Cidade + "</td></tr>" +
                          "<tr><td>&nbsp;</td><td>&nbsp;</td></tr>" +
                          "<tr><td>Orcamento:</td><td>" + this.TextBoxID.Text + "</td></tr>" +
                          "<tr><td>Data:</td><td>" + this.TextBoxData.Text + "</td></tr></table>" +
                          "<br><br><hr><br><br>";
            emailBody += "<table border=1>" +
                "<tr><td>SubFamilia</td><td>Produto</td><td>Quantidade</td><td>Unidade</td><td>Referencia</td><td>Embalagem</td><td>Caixa</td></tr>";

            foreach (GridViewRow gvr in this.GridViewItens.Rows)
            {
                emailBody += "<tr><td>" + gvr.Cells[2].Text +
                            "</td><td>" + gvr.Cells[3].Text +
                            "</td><td>" + ((TextBox)gvr.Cells[4].Controls[1]).Text +
                            "</td><td>" + gvr.Cells[5].Text +
                            "</td><td>" + gvr.Cells[6].Text +
                            "</td><td>" + gvr.Cells[7].Text +
                            "</td><td>" + gvr.Cells[8].Text +
                            "</td></tr>";
            }
            emailBody += "</table>";
            emailBody += "<br><br><b><i>*Este email foi enviado automaticamente pelo site em " + DateTime.Now.ToString() + "</i></b>";

            oEmail.Body = emailBody;
            SmtpClient oEnviar = new SmtpClient();
            oEnviar.Host = ConfigurationManager.AppSettings["Email.Host.SMTP"];
            oEnviar.Port = int.Parse(ConfigurationManager.AppSettings["Email.Host.SMTP.Port"]);
            oEnviar.Credentials = new NetworkCredential(
                                            ConfigurationManager.AppSettings["Email.Administrador"],
                                            ConfigurationManager.AppSettings["Email.Administrador.Pass"]);
            oEnviar.Send(oEmail);
            oEmail.Dispose();
        }

    }
}
